package busterminalweb.action.busmodel;

import busterminal.entity.BusModel;
import busterminal.entity.BusModelImplementation;
import busterminal.entity.service.VehicleType;
import busterminal.exception.BusinessException;
import busterminal.persistence.BusModelDAO;
import busterminal.services.ServiceLocator;
import busterminalweb.action.Action;
import busterminalweb.action.ActionResult;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Сохранить модель автобуса
 */
public class SaveBusModelAction implements Action {

    /**
     * Выполнить действие
     * @param request запрос
     * @param response ответ
     * @return страница, которой нужно передать управление
     */
    @Override
    public ActionResult execute(HttpServletRequest request, HttpServletResponse response) {
        if (request.getParameter("saveButton") != null) {
            int id = Integer.parseInt(request.getParameter("id"));
            BusModel busModel = (id == 0) ? new BusModelImplementation() : ServiceLocator.getService(BusModelDAO.class).read(id);

            // load data from request
            if (request.getParameter("modelName") != null && !request.getParameter("modelName").isEmpty()) {
                busModel.setModelName(request.getParameter("modelName"));
            } else {
                throw new BusinessException("Model name should be not empty");
            }

            if (request.getParameter("vehicleType") != null && !request.getParameter("vehicleType").isEmpty()) {
                busModel.setVehicleType(VehicleType.valueOf(request.getParameter("vehicleType")));
            } else {
                throw new BusinessException("It is necessary to define vehicle type");
            }

            BusModelDAO busModelDAO = ServiceLocator.getService(BusModelDAO.class);
            if (id != 0) {
                busModelDAO.update(busModel);
            } else {
                busModelDAO.create(busModel);
            }
        }

        //список, который нужно загрузить при возврате на главную страницу
        request.getSession().setAttribute("showPage", "bus-model-list");

        //main - это action, который никак сервлетом не обрабатывается,
        //т.е. открывается главная страница
        return ActionResult.redirect("main");
    }

    /**
     * Получить имя действия
     * @return имя действия
     */
    @Override
    public String getName() {
        return "bus.model.save";
    }
}